// Changelog 14.02.2001

#ifndef __City__ 
#define __City__

#include "geometry.h"


inline int Intersect(const Vector& a,const Vector& b,const Vector& c,const Vector& d)
{
}
class BlockTriangle:public Triangle {
protected:
public:
  BlockTriangle(const Vector&,const Vector&,const Vector&);
  void Subdivide();
};

class LandTriangle:public Triangle {
protected:
public:
  LandTriangle(const Vector&,const Vector&,const Vector&);
  void Subdivide();
};

class BlockQuad:public Quadrangle {
protected:
public:
  BlockQuad(const Vector&,const Vector&,const Vector&,const Vector&);
  void Subdivide();
};




class LandQuad:public Quadrangle{
protected:
public:
  LandQuad(const Vector&,const Vector&,const Vector&,const Vector&);
  void Subdivide();
  void DiviseReg();
  void DiviseIrreg();
  void DiviseTrois();
  void DiviseDeux();
};


class City {
private:
public:
  City();
  void Generate();
  void SaveObj();
};

class Batiment:public Quadrangle {
protected:
	int etage;
public:
  Batiment(const Vector&,const Vector&,const Vector&,const Vector&);
  void setEtage();
  void Subdivide();
  void Specialization();
  void Toiture(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  
};


class Banc{
protected:
	int etage;
public:
	Banc();
  Banc(const Vector& );

  
};


class ImmeubleClassique:public Batiment {
protected:
	int etage;
public:
  ImmeubleClassique(const Vector&,const Vector&,const Vector&,const Vector&,const int);
  void RDC();
  void FacadeSecondaire(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FacadePrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresSecondaires(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresPrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);

};

class Eglise:public Batiment {
protected:
	int etage;
public:
  Eglise(const Vector&,const Vector&,const Vector&,const Vector&,const int);
  void RDC();
  void FacadeSecondaire(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FacadePrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresSecondaires(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresPrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);

};

class Ecole:public Batiment {
protected:
	int etage;
public:
  Ecole(const Vector&,const Vector&,const Vector&,const Vector&,const int);
  void RDC();
  void FacadeSecondaire(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FacadePrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresSecondaires(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresPrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);

};

class ImmeubleVerre:public Batiment {
protected:
	int etage;
public:
  ImmeubleVerre(const Vector&,const Vector&,const Vector&,const Vector&,const int);
  void RDC();
  void FacadeSecondaire(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FacadePrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresSecondaires(const Vector& a,const Vector& b,const Vector& c,const Vector& d);
  void FenetresPrincipale(const Vector& a,const Vector& b,const Vector& c,const Vector& d);

};

class EspaceVert:public Batiment {
protected:
	
public:
  EspaceVert(const Vector&,const Vector&,const Vector&,const Vector&);
  void Parc();
  void Place();


};
#endif